Équipe 6 du groupe 2

École Polytechnique de Montréal
Département Génie Informatique et Génie Logiciel
INF8460 – Traitement automatique de la langue naturelle

TP1 INF8460
Automne 2022

1. DESCRIPTION

Dans ce TP, l’idée est d’effectuer de la recherche de passages de texte dans un corpus à partir d’une question en langue naturelle. Les questions et passages sont en anglais.

Voici un exemple :
Entrée : Question : where is the show the vikings filmed

Solution - Trouver un passage qui contient la réponse à la question : For the 2012 BBC Documentary series, see Vikings (TV documentary series) . Vikings is an Irish-Canadian historical drama television series written and created by Michael Hirst for the television channel History. Filmed in __Ireland__, it premiered on 3 March 2013 in the United States and Canada. Vikings is inspired by the sagas of Viking Ragnar Lothbrok, one of the best-known legendary Norse heroes and notorious as the scourge of England and France. The show portrays Ragnar as a former farmer who rises to fame by successful raids into England, and eventually becomes king of Denmark, with the support of his family and fellow warriors: his brother Rollo, his son Bjorn Ironside, and his wives—the shieldmaiden Lagertha and the princess Aslaug.

Ici la réponse est en gras dans le texte.

2. LIBRARIES PERMISES

3. INFRASTRUCTURE

4. DESCRIPTION DES DONNEES

Dans ce projet, vous utiliserez le jeu de données dans le répertoire data.

Nous vous fournissons un ensemble de données qui comprend un corpus (corpus.csv) qui contient tous les passages et leurs identificateurs (ID) et un jeu de données qui associe une question, un passage, et une réponse qui est directement extraite du passage. Ce jeu de données est composé de deux sous-ensembles :

5. ETAPES DU TP

A partir du notebook _inf8460_A22TP2 qui est distribué, vous devez réaliser les étapes suivantes. (Noter que les cellules dans le squelette sont là à titre informatif - il est fort probable que vous rajoutiez des sections au fur et à mesure de votre TP).

Ci-dessous définir la constante PATH qui doit être utilisée par votre code pour accéder aux fichiers. Il est attendu que pour la correction, le chargé de lab n'ait qu'à changer la valeur de PATH pour le répertoire où se trouver les fichiers de datasets.

5.1. Pré-traitement (5 points)

Les passages et questions de votre ensemble de données doivent d’abord être représentés et indexés pour ensuite pouvoir effectuer une recherche de passage pour répondre à une question. On vous demande donc d’implémenter une étape de pré-traitement des données.

Vous devez effectuer le pré-traitement du corpus (questions, passages) en convertissant le texte en minuscules, en segmentant le texte, en supprimant les mots outils et en racinisant (stemming) le texte. Votre fonction doit ensuite imprimer le nombre total de jetons dans le corpus d’entrainement (questions, passages).

5.2. Représentation de questions et de passages (35 points)

1) (2.5 points) Construction du vocabulaire. À cette étape, vous devez construire un vocabulaire à partir de votre corpus d’entrainement pré-traité. Notez que les questions et passages de l’ensemble d’entrainement doivent être inclus dans la construction du vocabulaire.

2) (10 points) Création d’un modèle sac de mots pour l’ensemble d’entrainement et de test. En utilisant sklearn et à partir de votre corpus pré-traité, vous représentez chaque passage et question de vos deux ensembles avec votre vocabulaire, en utilisant un modèle sac de mots des n-grammes (n=1-2) qu’ils contiennent et en pondérant ces éléments avec TF-IDF.

3) Maintenant que vous avez une représentation de vos passages et questions, il faut être capable de déterminer quel passage sera le plus pertinent pour la question posée

a) (5 points) Pour cela, vous devez écrire une fonction pour évaluer la similarité cosinus entre la représentation de la question et celle de chaque passage.

b) (5 points) Vous devez écrire une fonction rank_passages, qui au moyen de la précédente, retourne pour chaque question, le top-N (N=1,5,10, 50) des passages utiles pour répondre à la question (N est un paramètre). Ces passages devront être ordonnés du plus pertinent au moins pertinent. Idéalement le passage à la position 1 sera celui qui contient la réponse à la question.

c) (2.5 points) Vous devez exécuter votre fonction rank_passages sur toutes les questions de l’ensemble d'entraînement et sauvegarder vos résultats pour l’ensemble d’entrainement selon le même format que _passagesubmission.csv sous le nom _train_passagesubmission.csv.

d) (2.5 points) Vous devez écrire une fonction show_top_n_passages qui affiche le top-5 ainsi que le paragraphe attendu pour une question donnée.

e) (5 points) Évaluation: En utilisant votre ensemble d’entrainement, vous devez implémenter une fonction evaluate qui, à partir du fichier train_passage_submission.csv et de la comparaison entre la colonne Gold standard passage et vos top-N, calcule la précision top-N (N=1,5,10,50) sur l’ensemble de données en paramètre et l’afficher. Notez que nous réutiliserons la même fonction pour l’évaluation de votre ensemble de test, veillez donc à ce que la fonction soit générique et respecte le format du fichier.

f) Discussion : Observez les paragraphes obtenus au hasard sur un échantillon de questions. Lorsque le premier passage n’est pas celui qui est attendu (qui contient la réponse), pouvez-vous donner une raison pour sa haute similarité avec la question ? Quels sont les facteurs qui peuvent expliquer, globalement, les erreurs du modèle ? Etayez votre discussion avec des exemples précis.

On peut observer que pour la première question affichée, sur les quatres mots composants cette question, 2 sont présents dans la réponse estimée à deux reprises : 'and' et 'mountain'. Les contextes entre la réponse estimée et la vraie réponse semblent similaires ce qui explique une grande similarité. Dans la deuxième question affichée si on prend en compte les mots de la question sur les 5, 2 sont présents dans le top_1. Le mot 'notari' est présent 6 fois et le mot 'public' 4 fois. La haute similarité est de nouveau justifiée.

Le calcul de similarité ne prend pas bien en compte la différence entre un même mot qui apparaît plusieurs fois dans la réponse et plusieurs mots différents qui apparaissent dans la réponse. Idf permet de diminuer l'importance des mots fréquents dans l'ensemble du corpus mais chaque paragraphe peut correspondre à un contexte particulier et un mot rare dans l'ensemble du corpus peut apparaître plusieurs fois dans un même paragraphe.

Les facteurs qui peuvent expliquer les erreurs du modèle sont le choix de la pondération et le choix du modèle de calcul de similarité. Pour améliorer notre modèle il faudrait donc modifier la métrique tf-idf et/ou utiliser une autre méthode de calcul de similarité avec l'apprentissage machine par exemple.

5.3. Exécution sur l’ensemble de test (5 points)

Vous devez exécuter la fonction rank_passages sur toutes les questions de l’ensemble de test. A cette étape, vous devez produire un fichier passage_submission.csv qui contient pour toutes les questions de l’ensemble de test le top-N des passages retournés par votre modèle pour y répondre. Le fichier doit respecter le format démontré dans sample_passage_submission.csv.

5.4. Amélioration (10 points)

Proposez une autre métrique que TF-IDF qui permette d’améliorer les performances obtenues sur l’ensemble d’entrainement. Effectuez une recherche sur Google scholar pour vous donner des idées et indiquez vos références. Démontrez l’amélioration par une exécution de la métrique et un affichage de ses performances comparé à TF-IDF sur l’ensemble d’entrainement. Enfin, vous devez générer un fichier _test_passage_submissionimproved.csv selon le même format précédent avec vos nouvelles réponses sur l'ensemble de test selon cette nouvelle métrique.

Réponse : Nous avons choisi d'utiliser une nouvelle pondération, BM-25, ou Okapi, plus précise que TF-IDF car elle prend en compte la longueur des documents utilisés. Pour cela nous nous sommes basés sur l'article de Vincent Claveau de l'IRISA-CNRS, trouvable à l'adresse suivante : https://aclanthology.org/F12-2007.pdf

La formule que nous utilisons se trouve à la 5ème page du PDF (page numérotée 89 dans le document). La mesure de distance est toujours la similarité cosinus.

Création des matrices TF-IDF BM-25 :

Création du fichier train_passage_submission_improved.csv :

Comparaison des résultats avec la fonction evaluate :

Création du fichier à soumettre pour l'ensemble de test :

Suite à nos recherches de métriques alternatives à TF-IDF dans la littérature existante, la métrique utilisée majoritairement était la métrique TF-IDF BM25. Nous avons donc décidé de l’implémenter et d’explorer les paramètres. Les résultats maximales que nous avons obtenu sont une précision de 0.6263 pour le top 1 contre 0.6335 pour TF-IDF et une précision de 0.9342 pour le top 50 contre 0.9712. Ces résultats sont malheureusement un peu en dessous de ceux de TF-IDF. Ce qui peut expliquer que dans une grande majorité de projets de recherche la simple pondération TF-IDF est utilisée. Toutefois, comme le souligne l’article étudié, d’autres pondérations ont été développées comme les modèles DFR (Divergence from Randomness, proposés par Amati et Van Rijsbergen (2002)) ou les modèles de langues (Ponte et Croft, 1998). Ces deux approches construisent des mesures de similarités basées sur des modèles probabilistes de fréquence des termes. Ces modèles peuvent s’interpréter comme des pondérations dans un modèle vectoriel. Nous n’avons pas eu le temps de pousser ces méthodes.

LIVRABLES

Vous devez remettre sur Moodle un zip contenant les fichiers suivants :

  1. Le code : Vous devez compléter le squelette _inf8460_A22TP2.ipynb sous le nom _matricule1_matricule2_matricule3TP1.ipynb. Ce notebook reprend les différentes questions, et doit contenir les fonctionnalités requises avec des commentaires appropriés. Le code doit être exécutable sans erreur et accompagné des commentaires appropriés dans le notebook de manière à expliquer les différentes fonctions. Les critères de qualité tels que la lisibilité du code et des commentaires sont importants. Tout votre code et vos résultats doivent être exécutables et reproductibles ;
  2. Un fichier html représentant votre notebook complètement exécuté sous format html
  3. Les fichiers de soumission de données d’entrainement et de test : _train_passagesubmission, _test_passagesubmission.csv et _test_passage_submissionimproved.csv ;
  4. Un document contributions.txt : Décrivez brièvement le pourcentage de contribution et la contribution de chaque membre de l’équipe. Tous les membres sont censés contribuer au développement. Bien que chaque membre puisse effectuer différentes tâches, vous devez vous efforcer d’obtenir une répartition égale du travail.

EVALUATION

Votre TP sera évalué selon les critères suivants :

  1. Exécution correcte du code
  2. Performance correcte des modèles
  3. Organisation du notebook
  4. Qualité du code (noms significatifs, structure, performance, gestion d’exception, etc.)
  5. Commentaires clairs et informatifs

CODE D’HONNEUR